// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.google.zxing.datamatrix.detector; import com.google.zxing.NotFoundException; import com.google.zxing.ResultPoint; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.DetectorResult; import com.google.zxing.common.GridSampler; import com.google.zxing.common.detector.WhiteRectangleDetector; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; // Referenced classes of package com.google.zxing.datamatrix.detector: // b, c public final class Detector { private final BitMatrix a; private final WhiteRectangleDetector b; public Detector(BitMatrix bitmatrix) { a = bitmatrix; b = new WhiteRectangleDetector(bitmatrix); } private static int a(float f) { return (int)(0.5F + f); } private static int a(ResultPoint resultpoint, ResultPoint resultpoint1) { return a((float)Math.sqrt((resultpoint.getX() - resultpoint1.getX()) * (resultpoint.getX() - resultpoint1.getX()) + (resultpoint.getY() - resultpoint1.getY()) * (resultpoint.getY() - resultpoint1.getY()))); } private ResultPoint a(ResultPoint resultpoint, ResultPoint resultpoint1, ResultPoint resultpoint2, ResultPoint resultpoint3, int i) { ResultPoint resultpoint4; ResultPoint resultpoint5; float f = (float)a(resultpoint, resultpoint1) / (float)i; int j = a(resultpoint2, resultpoint3); float f1 = (resultpoint3.getX() - resultpoint2.getX()) / (float)j; float f2 = (resultpoint3.getY() - resultpoint2.getY()) / (float)j; resultpoint4 = new ResultPoint(resultpoint3.getX() + f1 * f, resultpoint3.getY() + f * f2); float f3 = (float)a(resultpoint, resultpoint1) / (float)i; int k = a(resultpoint1, resultpoint3); float f4 = (resultpoint3.getX() - resultpoint1.getX()) / (float)k; float f5 = (resultpoint3.getY() - resultpoint1.getY()) / (float)k; resultpoint5 = new ResultPoint(resultpoint3.getX() + f4 * f3, resultpoint3.getY() + f3 * f5); if (a(resultpoint4)) goto _L2; else goto _L1 _L1: if (!a(resultpoint5)) goto _L4; else goto _L3 _L3: resultpoint4 = resultpoint5; _L6: return resultpoint4; _L4: return null; _L2: if (a(resultpoint5) && Math.abs(b(resultpoint2, resultpoint4).c() - b(resultpoint1, resultpoint4).c()) > Math.abs(b(resultpoint2, resultpoint5).c() - b(resultpoint1, resultpoint5).c())) { return resultpoint5; } if (true) goto _L6; else goto _L5 _L5: } private ResultPoint a(ResultPoint resultpoint, ResultPoint resultpoint1, ResultPoint resultpoint2, ResultPoint resultpoint3, int i, int j) { ResultPoint resultpoint4; ResultPoint resultpoint5; float f = (float)a(resultpoint, resultpoint1) / (float)i; int k = a(resultpoint2, resultpoint3); float f1 = (resultpoint3.getX() - resultpoint2.getX()) / (float)k; float f2 = (resultpoint3.getY() - resultpoint2.getY()) / (float)k; resultpoint4 = new ResultPoint(resultpoint3.getX() + f1 * f, resultpoint3.getY() + f * f2); float f3 = (float)a(resultpoint, resultpoint2) / (float)j; int l = a(resultpoint1, resultpoint3); float f4 = (resultpoint3.getX() - resultpoint1.getX()) / (float)l; float f5 = (resultpoint3.getY() - resultpoint1.getY()) / (float)l; resultpoint5 = new ResultPoint(resultpoint3.getX() + f4 * f3, resultpoint3.getY() + f3 * f5); if (a(resultpoint4)) goto _L2; else goto _L1 _L1: if (!a(resultpoint5)) goto _L4; else goto _L3 _L3: return resultpoint5; _L4: return null; _L2: if (!a(resultpoint5)) { return resultpoint4; } if (Math.abs(i - b(resultpoint2, resultpoint4).c()) + Math.abs(j - b(resultpoint1, resultpoint4).c()) <= Math.abs(i - b(resultpoint2, resultpoint5).c()) + Math.abs(j - b(resultpoint1, resultpoint5).c())) { return resultpoint4; } if (true) goto _L3; else goto _L5 _L5: } private static BitMatrix a(BitMatrix bitmatrix, ResultPoint resultpoint, ResultPoint resultpoint1, ResultPoint resultpoint2, ResultPoint resultpoint3, int i, int j) { return GridSampler.getInstance().sampleGrid(bitmatrix, i, j, 0.5F, 0.5F, (float)i - 0.5F, 0.5F, (float)i - 0.5F, (float)j - 0.5F, 0.5F, (float)j - 0.5F, resultpoint.getX(), resultpoint.getY(), resultpoint3.getX(), resultpoint3.getY(), resultpoint2.getX(), resultpoint2.getY(), resultpoint1.getX(), resultpoint1.getY()); } private static void a(Map map, ResultPoint resultpoint) { Integer integer = (Integer)map.get(resultpoint); int i; if (integer == null) { i = 1; } else { i = 1 + integer.intValue(); } map.put(resultpoint, Integer.valueOf(i)); } private boolean a(ResultPoint resultpoint) { return resultpoint.getX() >= 0.0F && resultpoint.getX() < (float)a.getWidth() && resultpoint.getY() > 0.0F && resultpoint.getY() < (float)a.getHeight(); } private b b(ResultPoint resultpoint, ResultPoint resultpoint1) { int i = (int)resultpoint.getX(); int j = (int)resultpoint.getY(); int k = (int)resultpoint1.getX(); int l = (int)resultpoint1.getY(); boolean flag; int k1; int l1; int i2; byte byte0; byte byte1; int j2; BitMatrix bitmatrix; int k2; int l2; boolean flag1; int i3; int j3; int k3; BitMatrix bitmatrix1; int l3; int i4; boolean flag2; int j4; if (Math.abs(l - j) > Math.abs(k - i)) { flag = true; } else { flag = false; } if (!flag) { int i1 = l; l = k; k = i1; int j1 = j; j = i; i = j1; } k1 = Math.abs(l - j); l1 = Math.abs(k - i); i2 = -k1 >> 1; if (i < k) { byte0 = 1; } else { byte0 = -1; } if (j < l) { byte1 = 1; } else { byte1 = -1; } j2 = 0; bitmatrix = a; if (flag) { k2 = i; } else { k2 = j; } if (flag) { l2 = j; } else { l2 = i; } flag1 = bitmatrix.get(k2, l2); i3 = i; j3 = i2; if (j == l) goto _L2; else goto _L1 _L1: bitmatrix1 = a; if (flag) { l3 = i3; } else { l3 = j; } if (flag) { i4 = j; } else { i4 = i3; } flag2 = bitmatrix1.get(l3, i4); if (flag2 != flag1) { j2++; flag1 = flag2; } j4 = j3 + l1; if (j4 <= 0) goto _L4; else goto _L3 _L3: if (i3 != k) goto _L6; else goto _L5 _L5: k3 = j2; _L8: return new b(resultpoint, resultpoint1, k3, null); _L6: i3 += byte0; j4 -= k1; _L4: j += byte1; j3 = j4; break MISSING_BLOCK_LABEL_142; _L2: k3 = j2; if (true) goto _L8; else goto _L7 _L7: } public DetectorResult detect() { ResultPoint aresultpoint[] = b.detect(); ResultPoint resultpoint = aresultpoint[0]; ResultPoint resultpoint1 = aresultpoint[1]; ResultPoint resultpoint2 = aresultpoint[2]; ResultPoint resultpoint3 = aresultpoint[3]; ArrayList arraylist = new ArrayList(4); arraylist.add(b(resultpoint, resultpoint1)); arraylist.add(b(resultpoint, resultpoint2)); arraylist.add(b(resultpoint1, resultpoint3)); arraylist.add(b(resultpoint2, resultpoint3)); Collections.sort(arraylist, new c(null)); b b1 = (b)arraylist.get(0); b b2 = (b)arraylist.get(1); HashMap hashmap = new HashMap(); a(hashmap, b1.a()); a(hashmap, b1.b()); a(hashmap, b2.a()); a(hashmap, b2.b()); ResultPoint resultpoint4 = null; ResultPoint resultpoint5 = null; ResultPoint resultpoint6 = null; Iterator iterator = hashmap.entrySet().iterator(); while (iterator.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next(); ResultPoint resultpoint12 = (ResultPoint)entry.getKey(); ResultPoint resultpoint13; ResultPoint resultpoint14; if (((Integer)entry.getValue()).intValue() == 2) { resultpoint13 = resultpoint12; resultpoint12 = resultpoint6; resultpoint14 = resultpoint4; } else if (resultpoint4 == null) { resultpoint13 = resultpoint5; ResultPoint resultpoint15 = resultpoint6; resultpoint14 = resultpoint12; resultpoint12 = resultpoint15; } else { resultpoint13 = resultpoint5; resultpoint14 = resultpoint4; } resultpoint5 = resultpoint13; resultpoint4 = resultpoint14; resultpoint6 = resultpoint12; } if (resultpoint4 == null || resultpoint5 == null || resultpoint6 == null) { throw NotFoundException.getNotFoundInstance(); } ResultPoint aresultpoint1[] = { resultpoint4, resultpoint5, resultpoint6 }; ResultPoint.orderBestPatterns(aresultpoint1); ResultPoint resultpoint7 = aresultpoint1[0]; ResultPoint resultpoint8 = aresultpoint1[1]; ResultPoint resultpoint9 = aresultpoint1[2]; ResultPoint resultpoint10; int i; int j; int k; int l; ResultPoint resultpoint11; BitMatrix bitmatrix; if (!hashmap.containsKey(resultpoint)) { resultpoint10 = resultpoint; } else if (!hashmap.containsKey(resultpoint1)) { resultpoint10 = resultpoint1; } else if (!hashmap.containsKey(resultpoint2)) { resultpoint10 = resultpoint2; } else { resultpoint10 = resultpoint3; } i = b(resultpoint9, resultpoint10).c(); j = b(resultpoint7, resultpoint10).c(); if ((i & 1) == 1) { i++; } k = i + 2; if ((j & 1) == 1) { j++; } l = j + 2; if (k * 4 >= l * 7 || l * 4 >= k * 7) { resultpoint11 = a(resultpoint8, resultpoint7, resultpoint9, resultpoint10, k, l); if (resultpoint11 == null) { resultpoint11 = resultpoint10; } int i1 = b(resultpoint9, resultpoint11).c(); int j1 = b(resultpoint7, resultpoint11).c(); if ((i1 & 1) == 1) { i1++; } if ((j1 & 1) == 1) { j1++; } bitmatrix = a(a, resultpoint9, resultpoint8, resultpoint7, resultpoint11, i1, j1); } else { resultpoint11 = a(resultpoint8, resultpoint7, resultpoint9, resultpoint10, Math.min(l, k)); if (resultpoint11 == null) { resultpoint11 = resultpoint10; } int k1 = 1 + Math.max(b(resultpoint9, resultpoint11).c(), b(resultpoint7, resultpoint11).c()); if ((k1 & 1) == 1) { k1++; } bitmatrix = a(a, resultpoint9, resultpoint8, resultpoint7, resultpoint11, k1, k1); } return new DetectorResult(bitmatrix, new ResultPoint[] { resultpoint9, resultpoint8, resultpoint7, resultpoint11 }); } }